package main


import "fmt"

type SpecError struct {
	Msg string
}
func (se *SpecError) Error() string {
	return se.Msg
}

func foo() error {
	var err error

	// 接口的零值是其动态类型的 具体类型和具体类型的值都是 nil 的变量
	fmt.Println(err)
	// 空值可以和 nil 进行比较
	fmt.Println(err == nil)

	err = &SpecError{Msg:"spec: 1024"}
	return err
}

func main() {
	err := foo()

	if err != nil {
		fmt.Println(err)
		// 这里 想直接访问 msg 就已经是不可能的了
		// err.Msg
		// 只能是进行一个 类型断言
		// 类型强制转换为什么不行 ???
		err2 := err.(*SpecError)
		fmt.Print(err2.Msg)
	}
}
